/**
 * Copyright (C) 2022 Bonitasoft S.A.
 * Bonitasoft, 32 rue Gustave Eiffel - 38000 Grenoble
 * This library is free software; you can redistribute it and/or modify it under the terms
 * of the GNU Lesser General Public License as published by the Free Software Foundation
 * version 2.1 of the License.
 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 * You should have received a copy of the GNU Lesser General Public License along with this
 * program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
 * Floor, Boston, MA 02110-1301, USA.
 **/
package org.bonitasoft.web.rest.server.datastore.utils;

import java.util.ArrayList;
import java.util.List;

import org.bonitasoft.web.rest.server.datastore.converter.AttributeConverter;
import org.bonitasoft.web.rest.server.datastore.converter.EmptyAttributeConverter;
import org.bonitasoft.web.toolkit.client.common.util.StringUtil;

/**
 * @author Vincent Elcrin
 *         Build list of sorts from a string order following the pattern
 *         <attribute asc>,<attibute desc>,...
 */
public class Sorts {

    private final List<Sort> sorts;

    public Sorts(String orders, AttributeConverter converter) {
        sorts = parseOrders(orders, converter);
    }

    public Sorts(String orders) {
        this(orders, new EmptyAttributeConverter());
    }

    private List<Sort> parseOrders(final String orders, final AttributeConverter converter) {
        if (StringUtil.isBlank(orders)) {
            return new ArrayList<>();
        } else {
            return buildSortList(orders, converter);
        }
    }

    /**
     * Convert orders and build list of sort adding items to sorts parameter
     *
     * @param sorts
     * @param orders
     * @param converter
     */
    private List<Sort> buildSortList(final String orders, final AttributeConverter converter) {
        final List<Sort> sorts = new ArrayList<>();
        for (String order : orders.split(",")) {
            sorts.add(new Sort(order, converter));
        }
        return sorts;
    }

    public List<Sort> asList() {
        return sorts;
    }

}
